In data manipulation systems handling packets of data arranged in frames (a packet, or burst, of data including certain framing, or "housekeeping" bits is defined as a "frame"; data sent in the form of frames is termed "framed data"), there is often a requirement to transfer frames of data between a system and another location on a network. The frames of data may be arranged in queues representing the same or different levels of priority.
An interface circuit that resides between a local system and a network is termed a "network controller". The network controller administers data flow between the system and network, including buffering the data to compensate for timing discrepancies between the system and network, providing any necessary protocol conversion and carrying out "housekeeping" by adding bits to or stripping bits from the data passing through the controller. Various types of network controller architectures are implemented based on the network operating system employed and on other considerations.
For example, in a network of a type described in copending application (1), supra, for "FDDI CONTROLLER HAVING FLEXIBLE BUFFER MANAGEMENT", incorporated herein by reference, there is a network controller comprising a bus master architecture wherein queues of framed data are transferred from buffers established in a system memory to corresponding regions formed by logical FIFOs in an output buffer for transmission to a network. Between the system memory and the output buffer is a physical FIFO having a predetermined storage capacity, e.g., 32 bytes, for storing the framed data temporarily en route to the output buffer. One purpose of the physical FIFO is to provide buffering of data that is required as a result of differences in the clock rates of system and network clocks.
The queues of data handled by the FDDI network controller are transferred from buffer regions in the system memory to the output buffer, one frame at a time, in response to a request for transmission to the network upon receipt of a "token" (in FDDI, the network is composed of an optical medium) and data available for transmission. The queues of data are stored in corresponding queues formed by "logical FIFOs" in the output buffer.
Data is transferred in order of priority beginning with the highest until no additional data having the same priority is available for transmission or the unexpired token holding time (THT) during receipt of the token has become less than a threshold value for that priority. Details on this protocol are given in copending application (3), supra, for "METHOD OF AND SYSTEM FOR IMPLEMENTING MULTIPLE LEVELS OF ASYNCHRONOUS PRIORITY IN FDDI NETWORKS", incorporated herein by reference.
Following each transfer of framed data from the system memory, through the physical FIFO, to the output buffer, a decision is made either to transfer additional data having the same priority to the physical FIFO to thereafter be transferred to the same output buffer queue, or to transfer data having a different priority to the physical FIFO, if any additional data is available, thereafter to be sent to another output buffer queue. Copending application (4) for "METHOD OF AND SYSTEM FOR TRANSFERRING MULTIPLE PRIORITY QUEUES INTO MULTIPLE LOGICAL FIFOs USING A SINGLE PHYSICAL FIFO", incorporated herein by reference, describes how to prevent "locking-up" of the FIFO. Locking-up occurs when the amount of storage remaining available in the logical FIFO containing a particular queue to be written to is less than the storage capacity of the physical FIFO. Under this condition the physical FIFO cannot unload to the logical FIFO in the buffer.
An important parameter characterizing a network controller is its rate of data throughput, or simply "throughput", which is the rate at which the controller is able to transfer data in both directions between the system and network. The throughput of the controller should be as high as possible since controller throughput usually will determine the maximum rate at which data can be transferred to the network. A second important parameter of a network controller is its latency; i.e., the time delay between the data first "given" to the network controller and the time the data "appears" on the network (or vice versa).
There are natural limitations in the throughput of a network controller. For example, the system and network clock rates will limit the rate at which data can pass through the controller. Another factor tending to limit network throughput is the amount of "housekeeping" that must be carried out on data being transferred between the system and network.
For a latency example, when data in the form of frames or packets are transferred between the system and network, through a network controller with large buffer memory, latency tends to be increased. This is because the buffer receiving a transmit data frame from the system will wait until a complete frame is received before it initiates a transfer of data to the network. The length of each frame or packet of data in a string of data may vary. It is desirable that transmit data be transferred out of the buffer as soon as enough data is received. If the frame is long, the controller should initiate transfer of data to the network upon reception of enough bytes by the buffer to prevent a condition known as "underrunning" wherein the system cannot fill the buffer so fast as to prevent the buffer from running out of transmit data. It is important not to transfer to the network less than a complete frame of transmit data because an incomplete frame will not arrive at its destination and will waste network bandwidth.
On the other hand, it is not necessary to wait until the complete frame is received by the buffer to begin to transfer data to the network. Depending on system and network latencies, it sometimes would be possible to initiate transfer of data from the buffer to the network before a complete frame is received from the system. This is because if there is a sufficient amount of transmit data in the buffer, the frame will become completed while at least a part of it is still in the buffer and while the frame is being transferred to the network. In other words, the data incoming to the buffer will "catch up" to the data previously in it before the frame is transmitted.
To maximize data throughput, the inventor has discovered that it is desirable to initiate transfer of transmit data to the network either (1) when a full frame of transmit data is received in the buffer or (2) when the buffer contains an amount of transmit data, less than a full frame, sufficient to enable the frame to become completed while the data in the buffer is being transferred to the network, whichever is less.
Upon reception of data from the network, it is not necessary to wait until a complete frame is received by the buffer because the remaining portion of the frame necessarily will arrive thereafter. Ideally, the receive data should be transferred from the buffer to the system as soon as possible upon reception of the first byte. However, some receive frames may not be accepted by the network controller. Frames may be "flushed" by the controller because the frames are not addressed to the system or because the frames are deficient in some other manner. The receive data cannot be assessed by the controller immediately upon receipt of a part of a frame. It accordingly is desirable to begin to unload receive data from the buffer only after at least a predetermined amount of data is received.